﻿#include <iostream>
#include <cmath>//数学相关工具
#include <string>
using namespace std;

int max(int a, int b);
void swap(int a, int b);
void swap(int* a, int* b);
void swapx(int& a, int& b);
int sum(int a, int b = 10);
int* getArr();
int mainBase(void) {
	/*int a = 1, b = 2;
	cout << "a : " << a << " b : " << b << endl;
	swapx(a, b);
	cout << "a : " << a << " b : " << b << endl;
	cout << "sum : " << sum(1) << endl;*/
	//1维数组
	//int arr[] = {1, 2, 3, 4, 5};
	//int* arrP = arr;
	//cout << sizeof(arr) / sizeof(int)<< endl;

	//for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
	//	//通过下标访问数组
	//	//cout << arr[i] << ",";
	//	//通过指针访问数组
	//	cout << *arrP << ",";
	//	arrP++;
	//}

	//2维数组
	int arr[4][4] = {
		{1, 0, 0, 0},
		{1, 0, 0, 0},
		{1, 0, 0, 0},
		{1, 0, 0, 0}
	};
	//下标方式查询数组
	/*cout << sizeof(arr[0]) << endl;
	for (int i = 0; i < sizeof(arr) / (sizeof(int) * 4); i++) {
		for (int j = 0; j < sizeof(arr[i]) / sizeof(int); j++) {
			cout << arr[i][j] << ",";
		}
	}*/
	//指针形式查询数组
	/*int (*arrP)[4] = arr;
	for (int i = 0; i < 4; i++) {
		int* arrPa = arrP[i];
		for (int j = 0; j < 4; j++) {
			cout << *arrPa << ",";
			arrPa++;
		}
	}*/

	string str = "hello string";
	cout << str << endl;
	return 1;
}

int max(int a, int b) {
	return a > b ? a : b;
}

//传值调用 当某个数据作为参数传递给函数后，在函数内部对该参数所做的更新不会影响作为函数参数的数据
void swap(int a, int b) {
	int tmp = a;
	a = b;
	b = tmp;
}

//指针调用 当某个数据的指针作为参数传递给函数后，在函数内部对该参数所做的更新会影响作为函数参数的数据
void swap(int* a, int* b) {
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

//引用调用 当某个数据的引用作为参数传递给函数后，在函数内部对该参数所做的更新会影响作为函数参数的数据
void swapx(int& a, int& b) {
	int tmp = a;
	a = b;
	b = tmp;
}
//函数形参默认值
//函数定义：int sum(int a, int b = 10);
int sum(int a, int b) {
	return a + b;
}

//函数返回数组
int* getArr() {
	return NULL;
}

//int g = 3;
//extern int ex = 0;//存储类用于提供一个全局变量的引用，全局变量对所有的程序文件都是可见的。
//				//当您使用 'extern' 时，对于无法初始化的变量，会把变量名指向一个之前定义过的存储位置。
//				// 
//thread_local int tl = 10;//该变量只可以在创建它的线程上有效，当线程被销毁时，该变量也会被销毁
//
////int main(void) {
////	
////	int a, b;
////	a = 1, b = 2;
////	int c;
////	c = a + b;
////	cout << c << endl;
////
////	//修饰符
////	unsigned int d;//无符号
////	short int e;//短整型
////	long int f;//长整型
////	//类型限定符
////	const int q = 0;//常量
////	volatile int w = 10;//用于线程安全的限定
////	register int m = 10;//寄存器变量 因为位置在寄存器中，故没有
////	C c();
////	D d(12);
////	E e = 12;
////	return 1;
////}
//
//class C {
//private:
//	mutable int value_;//可以被const函数所修改的变量
//public:
//	int get_value() const  {//const 关键字表示该成员函数不会修改对象中的数据成员
//		return value_;
//	}
//
//	void set_value(int value_) const {// mutable 关键字允许在 const 成员函数中修改成员变量
//		this->value_ = value_;
//	}
//};
//
//class D {
//public:
//	//explicit关键字防止该类型被隐式转换
//	explicit D(int t) {
//	}
//};
//
//class E {
//public:
//	E(int t) {
//	}
//};
